(function flatThis() {
    var obj={
        id:"awesome",
        cool:function(){
            console.log(this.id);
        }
    };

    var id="not awesome";

    obj.cool();

    setTimeout(obj.cool,100);//注意这里是window在调用obj.cool，而不是obj在调用cool，cool只是一个放在obj中的一个函数

    // 这个地方还有点疑惑
})();

// 使用变量将this记录下来
(function flatThis() {
    var obj={
        id:"awesome",
        cool:function () {
            var self=this;
            setTimeout(function() {
                console.log(self.id);
            }, 100);
        }
    }

    obj.cool();
})();

// 使用flat arrow来解决这个问题
(function name() {
    var obj={
        id:"awesome",
        cool:function () {
            setTimeout(()=>{
                console.log(this.id);
            }, 100);
        }
    }

    obj.cool();
})();


// function 上有个bind方法，可以用来绑定this作用域
(function () {
    var obj={
        id:"awesome",
        cool:function () {
            setTimeout(function(){
                console.log(this.id);
            }.bind(this), 100);
        }
    }

    obj.cool();
})();